マスター・データ・ストアとサブスクライバ・データ・ストアの間でレプリケーションを正しく機能させることができない場合、次のいずれかの問題が該当する可能性があります。
考えられる原因
|
対処
|
---|---|
TimesTenデーモンまたはレプリケーション・エージェント(あるいはその両方)が稼働していない | |
マスターとサブスクライバのエージェントが通信していない | |
レプリケーションが起動状態にない | |
レプリケーション・スキームにエラーがある | |
レプリケーション・スキームと表の所有者名が一致しない | |
レプリケーション表に整合性がない |
ttStatusユーティリティを使用して、メインTimesTenデーモンが稼働していること、およびすべてのマスターおよびサブスクライバのデータ・ストアについてレプリケーション・エージェントが起動していることを確認します。マスターおよびサブスクライバのデータ・ストアが1つしかない単純なレプリケーション・スキームの出力は、例4.1のようになります。
TimesTenデーモンが稼働していても、レプリケーション・エージェントが稼働していない場合、出力は例4.2に示すようになります。この場合は、『Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド』のレプリケーション・エージェントの起動と停止に関する項の説明に従って、レプリケーション・エージェントを起動します。
TimesTenデーモンとレプリケーション・エージェントがどちらも稼働していない場合、出力は例4.3に示すようになります。この場合は、TimesTenが正しくインストールされていること、およびData Managerサービスが起動されていることを確認します(『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のTimesTenのインストールに関する項を参照)。
> ttStatus TimesTen status report as of Tue Oct 28 10:36:11 2003 Daemon pid 3396 port 15000 instance MYINSTANCE TimesTen server pid 3436 started on port 15002 ------------------------------------------------------------------------ Data store c:\temp\subscriberds There are 3 connections to the data store Data store is in shared mode Shared Memory KEY Global\DBI3f9eb597.1.SHM.6 HANDLE 0x304 Subdaemon pid 1336 context 0x5157d8 connected (KEY Global\DBI3f9eb597.1.SHM.6) Replication pid 2988 context 0xbc4068 connected (KEY Global\DBI3f9eb597.1.SHM.6) Replication pid 2988 context 0xbe7720 connected (KEY Global\DBI3f9eb597.1.SHM.6) cache agent restart policy: manual ------------------------------------------------------------------------ Data store c:\temp\masterds There are 4 connections to the data store Data store is in shared mode Shared Memory KEY Global\DBI3f9eb58b.0.SHM.8 HANDLE 0x2e0 Subdaemon pid 2364 context 0x5157d8 connected (KEY Global\DBI3f9eb58b.0.SHM.8) Replication pid 2496 context 0xbc4018 connected (KEY Global\DBI3f9eb58b.0.SHM.8) Replication pid 2496 context 0xbe76d0 connected (KEY Global\DBI3f9eb58b.0.SHM.8) Replication pid 2496 context 0xb97a90 connected (KEY Global\DBI3f9eb58b.0.SHM.8)
> ttStatus TimesTen status report as of Tue Oct 28 10:31:30 2003 Daemon pid 3396 port 15000 instance MYINSTANCE TimesTen server pid 3436 started on port 15002 ----------------------------------------------------------------- Data store c:\temp\subscriberds There are no connections to the data store cache agent restart policy: manual ----------------------------------------------------------------- Data store c:\temp\masterds There are no connections to the data store cache agent restart policy: manual ----------------------------------------------------------------- End of report
ttRepAdmin -receiver -listを使用して、レプリケーション・エージェントが互いに通信していることを確認します。masterdsデータ・ストアがsubscriberdsデータ・ストアにレプリケートされる場合、出力は次のようになります。
> ttRepAdmin -receiver -list -connStr "dsn=masterDSN" Peer name Host name Port State Proto ---------------- ------------------------ ------ ------- ----- SUBSCRIBERDS MYHOST Auto Start 10 Last Msg Sent Last Msg Recv Latency TPS RecordsPS Logs ------------- ------------- ------- ------- --------- ---- 0:01:12 - 19.41 5 52 2次に、ttDaemonLogユーティリティを使用して、デーモン・ログでエラーを確認します。
> ttDaemonLog | grep Err > Errors
ttReplicationStatus()プロシージャを使用し、マスターに対するサブスクライバ・データ・ストアの状態を確認します。サブスクライバの状態がStop、PauseまたはFailedの場合は、ttRepSubscriberStateSet()プロシージャを使用して、サブスクライバの状態をStartにリセットできます(『Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド』のサブスクライバのレプリケーション状態の設定に関する項を参照)。
ttReplicationStatus()を使用して、subscriberdsデータ・ストアのステータスをそのマスター・データ・ストアmasterDSNから取得します。次のように入力します。
> ttIsql -connStr "dsn=masterDSN" Command> CALL ttReplicationStatus ('subscriberds'); < SUBSCRIBERDS, MYHOST, 0, pause, 1, 10, REPSCHEME, REPL > 1 row found.状態をStartにリセットするには、次のようにttRepSubscriberStateSet()プロシージャをコールします。
Command> CALL ttRepSubscriberStateSet('REPSCHEME', 'REPL', 'SUBSCRIBERDS', 'MYHOST', 0) Command> CALL ttReplicationStatus ('subscriberds'); < SUBSCRIBERDS, MYHOST, 0, start, 1, 152959, REPSCHEME, REPL > 1 row found.
この項では、レプリケートされたシステムで様々なコンポーネントが正しく構成されていることを確認する手順について説明します。基本的な手順は次のようになります。
ttRepAdmin -showconfigを使用して、レプリケーション・スキームの構成を確認します。
次の項目を確認します。
> ttRepAdmin -showconfig -connStr "dsn=masterDSN" Self host "MYHOST", port auto, name "MASTERDS", LSN 4/2970276, timeout 120, threshold 0 List of subscribers ----------------- Peer name Host name Port State Proto ---------------- ------------------------ ------ ------- ----- SUBSCRIBERDS MYHOST Auto Start 10 Last Msg Sent Last Msg Recv Latency TPS RecordsPS Logs ------------- ------------- ------- ------- --------- ---- 0:01:12 - 19.41 5 52 2 List of tables and subscriptions -------------------------------- Table details ------------- Table : REPL.TAB Master Name Subscriber Name ----------- ------------- MASTERDS SUBSCRIBERDS
TTREP.TTSTORES表で、レプリケーションによってレプリケーション・スキームがローカル・データ・ストアに関連付けられていることを確認できます。データ・ストアに接続し、次のように入力します。
Command> select * from ttrep.ttstores where is_local_store <> 0x0; < -5193371075573733683, MYHOST, MASTERDS, 01, 0, 0, 4, 0 > 1 row found.1行の結果が返されます。2行以上返される場合は、オラクル社カスタマ・サポート・センターに連絡してください。1行も返されない場合は、次の文によって返されるホストは、TimesTenレプリケーションではローカル・システムとみなされません。
select distinct(host_name) from ttrep.ttstores;また、レプリケーション・スキームで指定されたデータ・ストア名が、DSNの記述で指定されたデータ・ストア名と一致しない場合もあります。
レプリケーション・スキームで指定されたホストとIPアドレスがレプリケーション・エージェントで解決できない場合、次のような原因が考えられます。
ホスト・マシンをレプリケーションで使用できるようにDNSおよび/etc/hostsファイルを構成する方法の詳細は、『Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド』のホストIPアドレスの構成に関する項を参照してください。
レプリケーション・スキームのホスト名とローカル・マシンのホスト名が一致していることを確認するには、次の手順を実行します。
『Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド』の表の要件と制限に関する項、およびレプリケーションのスキームと表の所有者に関する項で説明しているように、レプリケーション・スキームとレプリケーション表の所有者名は、関連するすべてのデータ・ストアで一致している必要があります。
レプリケーション・スキームに割り当てられている所有者名は、ttIsql repschemesコマンドをコールするか、TTREP.REPLICATIONS表の内容をリストして確認できます。
例4.8は、SYSTEM1とSYSTEM2の両方で、レプリケーション・スキーム名REPSCHEMEがデータ・ストアに一貫した所有者名(REPL)を持つことを示しています。例4.9は、所有者名が一貫していないスキーム名を示しています。これは、レプリケーション・スキームの定義で所有者名の指定を省略し、システムがそのレプリケーション・スキームの作成者のIDを採用した場合に発生することがあります。
SYSTEM1:
> ttIsql -connStr "dsn=masterDSN" Command> select * from ttrep.replications; < REPSCHEME , REPL , C, 0, 0, -1 > 1 row found.SYSTEM2:
> ttIsql -connStr "dsn=subscriberDSN" Command> select * from ttrep.replications; < REPSCHEME , REPL , C, 0, 0, -1 > 1 row found.
SYSTEM1:
> ttIsql -connStr "dsn=masterDSN" Command> select * from ttrep.replications; < REPSCHEME , SYSTEM1 , C, 0, 0, -1 > 1 row found.SYSTEM2:
> ttIsql -connStr "dsn=subscriberDSN" Command> select * from ttrep.replications; < REPSCHEME , SYSTEM2 , C, 0, 0, -1 > 1 row found.
ttIsqlコマンドのtablesを使用して、各データ・ストアの表に割り当てられている所有者名を確認できます。
例4.10は、SYSTEM1とSYSTEM2の両方で、TAB表がデータ・ストアに一貫した所有者名(REPL)を持つことを示しています。例4.11は、所有者名が各ホストに対して自動的に割り当てられ、それらが一貫していないTAB表を示しています。
マスター・データ・ストアとサブスクライバ・データ・ストアの両方で、レプリケーション表は完全に同じである必要があります。